package com.flbill.controller;

import com.flbill.common.result.Result;
import com.flbill.pojo.dto.CategoryDTO;
import com.flbill.pojo.dto.UserPageQueryDTO;
import com.flbill.pojo.dto.UserStatusDTO;
import com.flbill.pojo.vo.ClassVO;
import com.flbill.pojo.vo.UserPageVO;
import com.flbill.service.AdminService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Delete;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/admin")
@Tag(name = "管理员接口")
@Slf4j
public class AdminController {
    private final AdminService adminService;
    
    public AdminController(AdminService adminService) {
        this.adminService = adminService;
    }

    /**
     * 分页查询用户
     * @param userPageQueryDTO 查询条件
     * @return 分页查询结果
     */
    @GetMapping("/users")
    @Operation(summary = "获取用户列表")
    public Result<UserPageVO> pageQuery(UserPageQueryDTO userPageQueryDTO) {
        log.info("分页查询用户，参数：{}", userPageQueryDTO);
        UserPageVO userPageVO = adminService.pageQuery(userPageQueryDTO);
        return Result.success(userPageVO);
    }
    
    /**
     * 删除用户
     * @param id 用户ID
     * @return 操作结果
     */
    @DeleteMapping("/users/{id}")
    @Operation(summary = "删除用户")
    public Result<String> deleteUser(@PathVariable Integer id) {
        log.info("删除用户：{}", id);
        adminService.deleteUser(id);
        return Result.success("删除成功");
    }

    /**
     * 修改用户状态
     * @param id 用户ID
     * @param userStatusDTO 状态信息
     * @return 操作结果
     */
    @PutMapping("/users/{id}/status")
    @Operation(summary = "修改用户状态")
    public Result<String> updateUserStatus(@PathVariable Integer id, @RequestBody UserStatusDTO userStatusDTO) {
        log.info("修改用户状态，用户ID：{}，状态：{}", id, userStatusDTO.getStatus());
        adminService.updateUserStatus(id, userStatusDTO.getStatus());
        return Result.success("修改成功");
    }

    /**
     * 获取分类信息
     * @param type 分类类型
     * @return 分类列表
     */
    @GetMapping("/categories")
    @Operation(summary = "获取分类信息")
    public Result<List<ClassVO>> getCategory(@RequestParam String type) {
        log.info("获取分类信息，类型：{}", type);
        List<ClassVO> classVOList = adminService.getCategory(type);
        return Result.success(classVOList);
    }
    
    /**
     * 添加分类
     * @param categoryDTO 分类信息
     * @return 操作结果
     */
    @PostMapping("/categories")
    @Operation(summary = "添加分类")
    public Result<String> addCategory(@RequestBody CategoryDTO categoryDTO) {
        log.info("添加分类：{}", categoryDTO);
        adminService.addCategory(categoryDTO);
        return Result.success("添加成功");
    }
    
    /**
     * 修改分类
     * @param id 分类ID
     * @param categoryDTO 分类信息
     * @return 操作结果
     */
    @PutMapping("/categories/{id}")
    @Operation(summary = "修改分类")
    public Result<String> updateCategory(@PathVariable Integer id, @RequestBody CategoryDTO categoryDTO) {
        log.info("修改分类，ID：{}，信息：{}", id, categoryDTO);
        adminService.updateCategory(id, categoryDTO);
        return Result.success("修改成功");
    }
    
    /**
     * 删除分类
     * @param id 分类ID
     * @param type 分类类型
     * @return 操作结果
     */
    @DeleteMapping("/categories/{id}")
    @Operation(summary = "删除分类")
    public Result<String> deleteCategory(@PathVariable Integer id, @RequestParam String type) {
        log.info("删除分类，ID：{}，类型：{}", id, type);
        adminService.deleteCategory(id, type);
        return Result.success("删除成功");
    }
}
